package com.company.ThreadDemo;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

/**
 * 作者：13687
 * 日期：2017/6/4
 * 项目：ThreadPoolsDemo
 * 描述：监控Runnable 的执行状态
 * 1. 获取Future 对象 ExecutorService.submit(Runnable);(同时执行run方法)
 * 2.
 */
public class ThreadDemo4 {
	public static void main(String[] args) {
		ExecutorService es = Executors.newSingleThreadExecutor();
		CountRunnable work = new CountRunnable();
		// 我们调用submit（）执行一个任务的时候，会执行Runnable中的run（）方法
		Future<?> future = es.submit(work);
		// 子线程和主线程同时在执行
		System.out.println("任务开始于"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
		for(int i=0 ; i<10 ; i++){
			try {
//				TimeUnit.SECONDS.sleep(1);
				System.out.println("主线程"+Thread.currentThread().getName()+"仍然可以执行");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		try {
			//get（）方法，这个方法是一个阻塞方法，此刻正在执行run方法
			Object object = future.get();//需要等到run 方法结束 程序才会继续往下走
			System.out.println("任务结束于"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"  result="+object);
		} catch (Exception e) {
			e.printStackTrace();
		}
		es.shutdown();

		System.out.println("关闭线程池"+es.isShutdown());
	}
	public static class CountRunnable implements Runnable{
		private int sum;
		@Override
		public void run() {
			for(int i=1 ; i<11 ; i++){
				try {
					TimeUnit.MILLISECONDS.sleep(1000);
					sum+=i;
					System.out.println("工作线程"+Thread.currentThread().getName()+"正在执行  sum="+sum);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

			}
		}
	}
}
